/**
 * @Author:  renyc
 * @Date: 2022年12月1日09:22:32
 */

import * as Cesium from 'cesium/Cesium';
import { SourceEventType } from '../../event/EventType';
import Viewer from "../../viewer/Viewer";
import Layer from "../Layer";
import LayerType from "../LayerType";

/**
 * GeoJson类型的矢量数据
 * @deprecated
 */class GeoJsonLayer extends Layer{

    constructor(name, options){
        if(!options){
            throw new Error('GeoJsonLayer：options无效')
        }
        if(!options.source){
            throw new Error('GeoJsonLayer：source无效')
        }

        super(name, options);
        this._type = LayerType.GEOJSON;
        
        //注册source的Event事件
        this._source.on(SourceEventType.FETCHED, this._onSourceFetched, this);
    }

    /**
     * 将Layer挂载到Viewer上
     * 由子类实现该函数
     * @private
     * @Override 
     * @param {Viewer} viewer 
     */
    _attach(){

        if(this._viewer&&this._source){
            if(this._source._delegate){
                //source已经获取数据，直接将数据添加到Viewer上
                this._viewer.dataSources.add(this._source._delegate);
            }
            else{
                //source尚未获取数据，则source从数据源获取数据后，在attach到viewer上
                this._source.fetch();
            }
        }
    }

    /**
     * 将Layer从Viewer上卸载
     * 由子类实现该函数
     * @private
     * @Override 
     */
    _detach(){
        this._delegate.then(dataSource=>{            
            dataSource.entities.removeAll();
        })
    }

    // /**
    //  * Source获取数据后的Event响应函数
    //  */
    // _onSourceFetched(evt){
    //     //alert("GeoJSON Layer _onSourceFetched");
    //     //this._viewer.dataSources.add(this._source._delegate);
    //     this._viewer.dataSources.add(evt.data);
    // }

}

export default GeoJsonLayer
